【CDI】Informatica Cloud Data Integrationで、ソースのスキーマを自動的に読み込めるという「スキーマ変更処理」を検証してみた
こんにちは、データアナリティクス事業本部ビジネスソリューション部の渡部です。
今回はInformatica Cloud Data Integration(以降、CDI)のスキーマ変更処理について確認しました。
やりたいこと
ソースやターゲットの項目削除or項目追加された際に、マッピングのソース定義やターゲット定義で手動の同期化をすることなしに、自動でスキーマを読み込みデータを連携できるようにしたいです。
デフォルトの設定では項目が追加されても連携されず、項目が削除された際は連携エラーとなってしまいます。
そのため、CDI上で手動でのフィールド同期化が必要です。
概要図
今回はBigQuery → BigQueryのマッピングで検証します。
検証用に式トランスフォーメーション(以降、TF)を置いて、ターゲットに連携するUPDATE_TIMEにセッション実行日時をセットしております。
つまり、ソース項目は加工しないので、左から右への同期連携になります。
ソース項目が削除される場合
前提
- ソーステーブル:dynamic_schema_02
ID USER_ID 1 10001 2 10002 -
CDIソース定義
上記の通り、実テーブルのAMOUNTを項目削除して、CDIソース定義は削除前の状態、つまりAMOUNTが存在している状態にしています。
ターゲットのフィールドマッピングは以下の通りです。
CDIのターゲット定義は実テーブルと一致させています。
なお、「フィールドマップオプション」は「自動」を設定してください。
スキーマ変更処理「非同期」
まずデフォルトの動きを確認するために、マッピングタスクのスケジュールタブ内でスキーマ変更処理「非同期」を設定します。
この設定でマッピングタスクを実行するとエラーとなります。
セッションログを確認すると以下のエラーメッセージが出力されています。
[ERROR] Error Occured while reading data from src_bq | Invalid operation field name AMOUNT. The schemas of the source table and target table do not match. Verify that the schemas match, synchronize the fields, and run the mapping again.
CDIのソース定義と実ソーステーブルのスキーマが一致していなかったことによってエラーとなりました。
スキーマ変更処理「動的」
次にスキーマ変更処理「動的」を設定し、動的スキーマ処理は「DDLの変更を適用しない」にします。
※動的スキーマ処理のプルダウンの選択肢については、こちらをご参考ください。
この設定で実行すると、エラーなくソース値がターゲットに連携されます。
なお、AMOUNTはソーステーブルに存在しないので、Nullが連携されます。
- ターゲットテーブル:dynamic_schema_01
ID AMOUNT UPDATE_TIME USER_ID 1 null 2023-04-24T20:32:04 10001 2 null 2023-04-24T20:32:04 10002
ソース項目が追加される場合
前提
- ソーステーブル:dynamic_schema_02
ID USER_ID HEIGHT MISC AMOUNT 1 10001 null null 150 2 10002 null null 250 -
CDIソース定義
上記の通り、実テーブルに追加したAMOUNTがCDIソース定義には存在しない状態にしています。
ターゲットのフィールドマッピングは以下の通りです。
CDIのターゲット定義はテーブル定義と一致させています。
なお、「フィールドマップオプション」は「自動」を設定する必要があります。「手動」だと設定している項目のみが連携されます。
スキーマ変更処理「非同期」
デフォルトの動きを確認するために、マッピングタスクのスケジュールタブ内でスキーマ変更処理「非同期」を設定します。
この設定で実行するとエラーにはなりませんが、以下の通りAMOUNTが連携されません。
- ターゲットテーブル:dynamic_schema_01
ID AMOUNT UPDATE_TIME USER_ID 1 null 2023-04-25T00:01:16 10001 2 null 2023-04-25T00:01:16 10002
AMOUNTが連携されなかった理由は、CDIのソース定義にAMOUNTが存在しなかったため、ソーステーブルからAMOUNTがSELECTされなかったことが原因になります。
スキーマ変更処理「動的」
スキーマ変更処理「動的」を設定し、動的スキーマ処理は「DDLの変更を適用しない」にします。
実行すると、「非同期」では連携されなかった、AMOUNTが連携されました。
- ターゲットテーブル:dynamic_schema_01
ID AMOUNT UPDATE_TIME USER_ID 1 150 2023-04-24T20:32:04 10001 2 250 2023-04-24T20:32:04 10002
AMOUNTが連携されたのは、自動的にソーススキーマを読み取り、項目をすべてSELECTして項目名の一致でAMOUNTがターゲットに連携されたためです。
まとめ
以上、スキーマ変更処理の検証でした。
スキーマ変更処理を「動的」と設定すると、マッピング実行時に自動的にソースのスキーマを読み込み、ターゲットへ値を連携させることが可能です。
なおこの設定は、ターゲットも自動的にスキーマを読み込むようになります。
つまり、ターゲットテーブルの項目が削除or追加されて、CDIのターゲット定義と差異があったとしても、項目の連携が問題なく可能となります。
意図しない定義変更でも容赦なくデータが連携されてしまうので、使い所は考えなければなりませんが、
テーブル定義が固まっていないなどの場面では役立ちそうです。
ありがとうございました!